iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

前言

前面我們講完資料類型,迴圈,條件判斷。
那當然就是要綜合起來小小練習啦~
透過多練習,思考如何解決這個問題,就算解出來了,也可以再看看有沒有更好的更有效率的寫法。
多看多寫在遇到問題需要被解決的時候,就可以越快的解題喔~


先來個簡單的題目暖暖身。
題目: 輸入一個數字,如果它是偶數,輸出“偶數”,否則輸出“奇數”。

//奇數偶數
			Console.Write("請輸入數字: ");
			string input = Console.ReadLine();
			int num;

			int result;
			bool isInt = int.TryParse(input, out result);

			bool number = int.TryParse(input, out num) ;
			if (!isInt)
			{
				Console.WriteLine("僅限輸入整數");
				return; ; }

		
			if (num % 2 == 0) {
				Console.WriteLine("這是偶數");
				
			}
			else if (num % 2 == 1) {
				Console.WriteLine("這是奇數");
			}
			else { Console.WriteLine("請輸入數字"); }

上面這段程式碼要求使用者輸入一個數字,然後開始透過條件判斷,用取餘數的方式檢查數字為奇數或偶數,並確保輸入是整數。

bool isInt = int.TryParse(input, out result);:這行程式碼嘗試將使用者輸入的 input 轉換為整數,如果成功,將結果存儲在 result 變數中。同時,它會將轉換的成功與否存儲在 isInt 布林變數中。

bool number = int.TryParse(input, out num);:這行程式碼也是嘗試將使用者的輸入轉換為整數,並將結果存儲在 num 變數中。這是用於後面的奇偶數檢查。

如果輸入不是整數就顯示錯誤消息。
如果輸入是整數,就檢查數字是奇數還是偶數,然後輸出相應的訊息。


除了上面的練習以外,還可以做個小小遊戲,首先是猜拳遊戲,這個應該都很熟悉,剪刀,石頭,布的遊戲,那要怎麼使用條件判斷來呈現平手或是勝負呢?

var scissor = 0;
var stone = 1;
var paper = 2;

Console.WriteLine("剪刀為0,石頭為1,布為2");
Console.Write("玩家1請輸入您的選擇: ");
int player1 = Convert.ToInt32(Console.ReadLine());

Console.Write("玩家2請輸入您的選擇: ");
int player2 = Convert.ToInt32(Console.ReadLine());

string result = "玩家1您出: {0},玩家2您出:  {1}";
string message = String.Format(result, player1, player2);

if (player1 == player2)
{
    Console.WriteLine(message + "平手喔!再來一次!");
}
else if ((player1 + 1) % 3 == player2)
{
    Console.WriteLine(message + "玩家2獲勝!");
}
else if ((player2 + 1) % 3 == player1)
{
    Console.WriteLine(message + "玩家1獲勝!");
}
else
{
    Console.WriteLine("您輸入非正確的值,請重新輸入");
}

https://ithelp.ithome.com.tw/upload/images/20230918/201514705sh478IWoh.png
當你要判斷猜拳遊戲的勝負時,有三種可能的選擇:剪刀(0)、石頭(1)和布(2)。你的程式需要根據這三種選擇來判斷誰贏了。

這個程式片段的關鍵是判斷勝者的部分,來看下面程式碼的解釋:

  1. 首先要確保玩家1和玩家2的選擇不是平手(即 player1 != player2 )。
  2. 然後,我們使用 (player1 + 1) % 3 來計算玩家1的下一個選擇是什麼,然後檢查它是否等於玩家2的選擇。這個計算將 player1 的選擇加一,然後將結果對3取餘數。
    這將導致在選擇0、1和2之間循環,所以當 player1 選擇2時,它的下一個選擇將是0。這種計算方法允許我們判斷在三種選擇之間的勝利情況。
  3. 同樣地,我們使用 (player2 + 1) % 3 來計算玩家2的下一個選擇是什麼,然後檢查它是否等於玩家1的選擇。
  4. 如果以上兩個條件都不成立,那麼玩家1和玩家2的選擇是平手,並且程式會顯示平手的訊息。

這樣,我們通過簡化判斷過程,使程式更容易理解和維護。此外,這個方法適用於任何數量的選擇,只需將3更改為選擇的總數即可。在這個案例中,我們使用了3,因為有3種猜拳選擇。

上面猜拳遊戲完再來一個猜數字遊戲。這裡使用了條件判斷句,還有迴圈的方式,來去設計。
猜數字遊戲猜1~100以內的數字,玩家每次輸入一個數字,程式會檢查它是否與目標數字相等,然後給予提示。當玩家猜對時,遊戲結束並顯示猜測的次數。(可以試看看怎麼做出來。)
https://ithelp.ithome.com.tw/upload/images/20230918/20151470D5C9ES3ciJ.png
以下是程式碼

static void Main()
    {
        Random random = new Random();
        int targetNumber = random.Next(1, 101); // 隨機生成1到100之間的數字
        int attempts = 0;
        bool hasGuessedCorrectly = false;

        Console.WriteLine("歡迎來到猜數字遊戲!");
        Console.WriteLine("我已經想好了一個1到100之間的數字,請開始猜測。");

        while (!hasGuessedCorrectly)
        {
            Console.Write("請輸入你的猜測: ");
            string input = Console.ReadLine();

            if (int.TryParse(input, out int guess))
            {
                attempts++;

                if (guess < targetNumber)
                {
                    Console.WriteLine("猜得太小了,再試試看!");
                }
                else if (guess > targetNumber)
                {
                    Console.WriteLine("猜得太大了,再試試看!");
                }
                else
                {
                    Console.WriteLine($"恭喜你,猜對了!答案是{targetNumber}。你總共猜了{attempts}次。");
                    hasGuessedCorrectly = true;
                }
            }
            else
            {
                Console.WriteLine("請輸入有效的數字。");
            }
        }
    }

上面的程式碼,猜數字遊戲的結果大概像這樣,先有個猜數字遊戲畫面
https://ithelp.ithome.com.tw/upload/images/20230918/20151470SclgYf3d03.png
會根據輸入的數字判斷大小
https://ithelp.ithome.com.tw/upload/images/20230918/20151470ykp5lJtTxd.png
猜錯會繼續跑迴圈詢問
https://ithelp.ithome.com.tw/upload/images/20230918/20151470P8SAUvhkjs.png
一直到猜對為止
https://ithelp.ithome.com.tw/upload/images/20230918/20151470gA75xBQYgF.png

裡面首先要先解釋使用Random類別(虛擬亂數產生器)來生成一個隨機數字,用於猜數字遊戲中的目標數字。

Random這個類別是用來產生隨機值的,在使用Random以前需要先宣告,已建立Random的物件。

Random random_name = new Random(); // random_name自取

資料型別就是使用Random這個類型,建立了一個名為 random 的 Random 類別的實例。這個類別可以幫助我們生成隨機數字。

int targetNumber = random.Next(1, 101);:這行程式碼使用 random 物件的 Next 方法生成一個隨機數字,將其存儲在 targetNumber 變數中。
Next 是用來生成一個隨機整數的方法,其中的兩個參數分別指定了生成隨機數的範圍。
這裡要注意,使用Next方法後面的兩個參數
第一個參數 (1) 指定了範圍的起始值。
第二個參數 (101) 指定了範圍的結束值,但不包括這個結束值。
因此,random.Next(1, 101) 會生成一個從1到100之間(包括1但不包括101)的隨機整數。這樣的設計是為了讓生成的數字完全落在1到100的範圍內,因為 Next 方法的結束值是開放範圍的,不包括結束值本身。

在這個例子中,我們設定範圍為從1到100,因此 targetNumber 將包含一個從1到100之間(包括1和100)的隨機整數。

  1. int attempts = 0;:先初始化一個 attempts 的變數,主要是用來記錄玩家猜測的次數。
  2. bool hasGuessedCorrectly = false;:再初始化一個布林變數 hasGuessedCorrectly ,因為我們要追蹤判斷玩家有沒有猜對。用於追蹤玩家是否猜對了。
  3. 進入遊戲的歡迎訊息和說明(就看各自想要怎麼去設計)。
  4. 再來設計遊戲迴圈,因為不確定幾次所以就要如同Day 5 說的因為不確定會跑幾圈所以要使用while,這裡是用while (!hasGuessedCorrectly),只要玩家一直猜錯,迴圈就會持續執行。
  5. 玩家要輸入才能判斷,所以要求玩家輸入他們的猜測。
  6. 在Day 4提到使用.TryParse的方法,我們使用 int.TryParse 函式來檢查玩家輸入是否有效,並將其轉換為整數。如果轉換成功,我們就開始處理猜測。
  7. 如果猜測小於目標數字,玩家會得到提示 "猜得太小了,再試試看!",並增加 attempts 計數器。
  8. 如果猜測大於目標數字,玩家會得到提示 "猜得太大了,再試試看!",同樣也會增加 attempts 計數器。
  9. 如果玩家猜對了,我們顯示 "恭喜你,猜對了!" 的訊息,並告訴玩家他們猜了多少次。

以上就是幾個小小的綜合練習,針對前面已經教了的部分來去做進階練習。


Day 6 結束~ 就這樣完成快一周摟~


上一篇
Day 5 for / while迴圈轉轉轉
下一篇
Day 7 Array 陣列
系列文
30天開啟.NET後端工程師的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言